package cn.iocoder.yudao.module.picturebook.dal.mysql.classcheckin;

import java.time.LocalDate;
import java.util.*;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.module.picturebook.dal.dataobject.classcheckin.ClassCheckinDO;
import org.apache.ibatis.annotations.Mapper;
import cn.iocoder.yudao.module.picturebook.controller.admin.classcheckin.vo.*;
import org.apache.ibatis.annotations.Param;

/**
 * 班级打卡记录 Mapper
 *
 * @author 芋道源码
 */
@Mapper
public interface ClassCheckinMapper extends BaseMapperX<ClassCheckinDO> {

    default PageResult<ClassCheckinDO> selectPage(ClassCheckinPageReqVO reqVO) {
        return selectPage(reqVO, new LambdaQueryWrapperX<ClassCheckinDO>()
                .eqIfPresent(ClassCheckinDO::getClassId, reqVO.getClassId())
                .eqIfPresent(ClassCheckinDO::getUserId, reqVO.getUserId())
                .eqIfPresent(ClassCheckinDO::getCheckinDate, reqVO.getCheckinDate())
                .eqIfPresent(ClassCheckinDO::getBookId, reqVO.getBookId())
                .eqIfPresent(ClassCheckinDO::getContent, reqVO.getContent())
                .betweenIfPresent(ClassCheckinDO::getCreateTime, reqVO.getCreateTime())
                .orderByDesc(ClassCheckinDO::getUpdateTime));
    }

    List<ClassCheckinDO> listAll();

    Integer getDayCount(@Param("userId") Long userId);

    ClassCheckinDO getByUserIdAndDate(@Param("userId") Long userId, @Param("checkinDate") LocalDate checkinDate);

    void deleteByCheckinId(Long id);

    List<ClassCheckinDO> getByUser(Long userId);

    // 统计
    Integer getTodayCount(LocalDate now);
}